22.1 Arrayオブジェクト(Array Objects)
Arrayオブジェクトは、特定のクラスのプロパティ名に特別な処理を与えるエキゾチックなオブジェクトです。 この特別な扱いの定義については、9.4.2を参照してください。
22.1.1 Arrayコンストラクター(The Array Constructor)
Arrayコンストラクターは、次の特徴があります。
- 組み込みオブジェクト%Array%です。
- グローバルオブジェクトの"Array"プロパティの初期値です。
- コンストラクターとして呼び出されると、新しいArrayエキゾチックオブジェクトを作成して初期化します。
- 関数として呼び出されると、新しいArrayオブジェクトを作成して初期化します。したがって、関数呼び出しArray(…)は、同じ引数を持つオブジェクト作成式new Array(…)と同等です。
- 引数の数とタイプに基づいて動作がオーバーロードされる単一の関数です。
- サブクラス化できるように設計されています。クラス定義のextends句の値として使用できます。サブクラスコンストラクターには、superコールを含める必要があります。ただし、ほとんどのArray.prototypeメソッドは、this値がArrayエキゾチックオブジェクトであることに依存しない汎用メソッドです。
- 値が1の"length"プロパティがあります。
22.1.1.1 Array ( )
この説明は、Arrayコンストラクターが引数なしで呼び出された場合にのみ適用されます。
- 引数の数を numberOfArgs とする
- Assert: numberOfArgs = 0
- NewTarget が undefined なら、 アクティブ関数オブジェクト を、異なるなら NewTarget を newTarget とする
- ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
- ! ArrayCreate(0, proto) を返す
22.1.1.2 Array ( len )
この説明は、Arrayコンストラクターが1つの引数で呼び出された場合にのみ適用されます。
- 引数の数を numberOfArgs とする
- Assert: numberOfArgs = 1
- NewTarget が undefined なら、 アクティブ関数オブジェクト を、異なるなら NewTarget を newTarget とする
- ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
- ! ArrayCreate(0, proto) を array とする
- Type(len) が Number型 でないなら、
- ! CreateDataPropertyOrThrow(array, "0", len) を実行する
- 1 を intLen とする
- 6. と異なるなら、
- ToUint32(len) を intLen とする
- intLen ≠ len なら RangeError例外をスローする
- ! Set(array, "length", intLen, true) を実行する
- array を返す
22.1.1.3 Array ( ...items )
この説明は、Arrayコンストラクターが2つ以上の引数で呼び出された場合にのみ適用されます。
Array関数が呼び出されると、次の手順が実行されます。
- 引数の数を numberOfArgs とする
- Assert: numberOfArgs ≧ 2
- NewTarget が undefined なら、 アクティブ関数オブジェクト を、異なるなら NewTarget を newTarget とする
- ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
- ? ArrayCreate(numberOfArgs, proto) を array とする
- 0 を k とする
- 引数の項目を順番に含むゼロから始まるリストを items とする
- k < numberOfArgs の間繰り返し
- ! ToString(k) を Pk とする
- items[k] を itemK とする
- ! CreateDataPropertyOrThrow(array, Pk, itemK) を実行する
- k + 1 を k にセットする
- Assert: array の "length" プロパティは numberOfArgs
- array を返す
22.1.2 Arrayコンストラクターのプロパティ(Properties of the Array Constructor)
Arrayコンストラクターは、次の特徴があります。
- [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
- 以下のプロパティがあります。
22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
from が引数 items と オプション引数 mapfn と thisArg で呼び出されると、次の手順が実行されます。
- this値 を C とする
- mapfn が undefined なら、 false を mapping とする
- 2. と異なるなら、
- IsCallable(mapfn) が false なら、TypeError例外をスローする
- true を mapping とする
- ? GetMethod(items, @@iterator) を usingIterator とする
- usingIterator が undefined でないなら、
- IsConstructor(C) が true なら、
- a. と異なるなら、
- ! ArrayCreate(0) を A とする
- ? GetIterator(items, sync, usingIterator) を iteratorRecord とする
- 0 を k とする
- 繰り返し
- k ≧ 253 - 1 なら、
- ThrowCompletion(新規作成した TypeError オブジェクト) を error とする
- ? IteratorClose(iteratorRecord, error) を返す
- ! ToString(k) を Pk とする
- ? IteratorStep(iteratorRecord) を next とする
- next が false なら、
- ? IteratorValue(next) を nextValue とする
- mapping が true なら、
- vi. と異なるなら、 nextValue を mappedValue とする
- CreateDataPropertyOrThrow(A, Pk, mappedValue) を defineStatus とする
- defineStatus が 突然の完了 なら、 ? IteratorClose(iteratorRecord, defineStatus) を返す
- k + 1 を k にセットする
- k ≧ 253 - 1 なら、
- NOTE: items は Iterable ではないため、arrayライクオブジェクトと想定する
- ! ToObject(items) を arrayLike とする
- ? LengthOfArrayLike(arrayLike) を len とする
- IsConstructor(C) が true なら、
- 9. と異なるなら、
- ? ArrayCreate(len) を A とする
- 0 を k とする
- k < len の間繰り返し
- ? Set(A, "length", len, true) を実行する
- A を返す
22.1.2.2 Array.isArray ( arg )
isArray関数は1つの引数argを取り、次の手順を実行します。
22.1.2.3 Array.of ( ...items )
ofメソッドが任意の数の引数で呼び出されると、次の手順が実行されます。
- 関数に渡された引数の実際の数を len とする
- 関数に渡された引数の Listを items とする
- this値 を C とする
- IsConstructor(C) が true なら、
- 4. と異なるなら、
- ? ArrayCreate(len) を A とする
- 0 を k とする
- k < len の間繰り返し
- items[k] を kValue とする
- ! ToString(k) を Pk とする
- ? CreateDataPropertyOrThrow(A, Pk, kValue) を実行する
- k + 1 を k にセットする
- ? Set(A, "length", len, true) を実行する
- A を返す
22.1.2.4 Array.prototype
Array.prototypeの値は、組み込みのArrayプロトタイプオブジェクトである%Array.prototype%です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
22.1.2.5 get Array [ @@species ]
Array[@@species]はsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を返す
この関数の"name"プロパティの値は"get [Symbol.species]"です。
22.1.3 Arrayプロトタイプオブジェクトのプロパティ(Properties of the Array Prototype Object)
Arrayプロトタイプオブジェクトは、次の特徴があります。
- 組み込みオブジェクト%ArrayPrototype%です。
- Arrayエキゾチックオブジェクト であり、指定された内部メソッドがあります。
- "length"プロパティがあります。 初期値が0です。属性は{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false}です。
- [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
22.1.3.1 Array.prototype.concat ( ...arguments )
concatメソッドが0個以上の引数で呼び出されると、オブジェクトの配列要素と、それに続く各引数の配列要素を順番に含む配列が返されます。
次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? ArraySpeciesCreate(O, 0) を A とする
- 0 を n とする
- 最初の要素がO、続く要素が左から右の順序で関数呼び出しに渡された引数、であるリストを items とする
- items が empty でない間繰り返し
- items から最初の要素を削除し、その要素の値を E とする
- ? IsConcatSpreadable(E) を spreadable とする
- spreadable が true なら、
- 0 を k とする
- ? LengthOfArrayLike(E) を len とする
- n + len > 253 - 1 なら TypeError例外をスローする
- k < len の間繰り返し
- ! ToString(k) を P とする
- ? HasProperty(E, P) を exists とする
- exists が true なら、
- ? Get(E, P) を subElement とする
- ? CreateDataPropertyOrThrow(A, ! ToString(n), subElement) を実行する
- n + 1 を n にセットする
- k + 1 を k にセットする
- c. と異なるなら、
- NOTE: E はスプレッドではなく単一のアイテムとして追加される
- n ≧ 253 - 1, TypeError例外をスローする
- ? CreateDataPropertyOrThrow(A, ! ToString(n), E) を実行する
- n + 1 を n にセットする
- ? Set(A, "length", n, true) を実行する
- A を返す
concat の "length"プロパティは 1 です。
22.1.3.1.1 ランタイムセマンティクス(Runtime Semantics): IsConcatSpreadable ( O )
引数Oを指定した抽象操作IsConcatSpreadableは、次の手順を実行します。
22.1.3.2 Array.prototype.constructor
Array.prototype.constructorの初期値は%Array%です
22.1.3.3 Array.prototype.copyWithin ( target, start [ , end ] )
copyWithinメソッドは、最大3つの引数target、startおよびendを取ります。
次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- ? ToInteger(target) を relativeTarget とする
- relativeTarget < 0 なら max((len + relativeTarget), 0) 異なるなら、 let to be min(relativeTarget, len) を to とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を from とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- min(final - from, len - to) を count とする
- from < to で to < from + count なら、
- -1 を direction とする
- from + count - 1 を from にセットする
- to + count - 1 を to にセットする
- 10. と異なるなら、
- 1 を direction とする
- count > 0 の間繰り返し
- ! ToString(from) を fromKey とする
- ! ToString(to) を toKey とする
- ? HasProperty(O, fromKey) を fromPresent とする
- fromPresent が true なら、
- d. と異なるなら、
- Assert: fromPresent は false
- ? DeletePropertyOrThrow(O, toKey) を実行する
- from + direction を from にセットする
- to + direction を to にセットする
- count - 1 を count にセットする
- O を返す
22.1.3.4 Array.prototype.entries ( )
次の手順が実行されます。
- ? ToObject(this値) を O とする
- CreateArrayIterator(O, key+value) を返す
この関数は、%ArrayProto_entries%組み込みオブジェクトです。
22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg ] )
引数callbackfnは関数で、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 配列の要素ごとに昇順でcallbackfn1回呼び出します。ただしcallbackfnがfalseした時点で呼び出しは終了し、everyの結果はfalseとなります。 callbackfnがすべての要素に対してtrueを返した場合、everyはtrueを返します。 callbackfnは、実際に存在する要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。thisArgパラメーターが指定されている場合、callbackfn呼び出しのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
callbackfnは、要素の値、要素のインデックス、およびeveryの対象となっているオブジェクトの3つの引数で呼び出されます。
everyは、呼び出されたオブジェクトを直接変更しません。ただしcallbackfnの呼び出しによってオブジェクトが変更される場合があります。
everyが処理する要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出し後に配列に追加された要素は、callbackfnによってアクセスされません。 既存の配列要素が変更された場合、callbackfnに渡される値は、アクセス時点での値となります。 呼び出しが開始した後に削除された要素は呼び出されません。 everyは数学の"for all"数量詞のように機能します。 空の配列の場合、trueを返します。
everyが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- 0 を k とする
- k < len の間繰り返し
- true を返す
22.1.3.6 Array.prototype.fill ( value [ , start [ , end ] ] )
fillメソッドは、valueとstartのendの最大3つの引数値を取ります。
次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- k < final の間繰り返し
- O を返す
22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
引数callbackfnは関数で、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 filterは、配列内の要素ごとに昇順でcallbackfnを1回呼び出します。そして、callbackfnがtrueを返す要素で新しい配列を作成します。 callbackfnは、実際に存在する配列要素に対して呼び出されます。 欠落している要素は呼び出されません。
thisArgパラメーターは、callbackfnのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
callbackfnは、要素の値、要素のインデックス、対象となっているオブジェクトの3つの引数で呼び出されます。
filterは、呼び出されたオブジェクトを直接変更しません。ただし、callbackfnの呼び出しによってオブジェクトが変更される場合があります。
filterによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出し開始後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合、callbackfnに渡される値は、その時の値になります。 呼び出しが開始した後、削除された要素はアクセスされません。
filterが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- ? ArraySpeciesCreate(O, 0) を A とする
- 0 を k とする
- 0 を to とする
- k < len の間繰り返し
- A を返す
22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
findメソッドは、1つまたは2つの引数、predicateとthisArgを使用して呼び出されます。
引数predicateは関数です。3つの引数を受け入れ、ブール値に強制可能な値を返す必要があります。 findは、配列の各要素に対して昇順で1回predicateを呼び出します。 predicateがtrueを返す、findはその要素の値を返します。 それ以外の場合、findはundefinedを返します。
thisArgパラメーターは、predicateの呼び出しごとにthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
predicateは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。
findは、呼び出されたオブジェクトを直接変更しません。ただし、predicateの呼び出しによってオブジェクトが変更される場合があります。
findによって処理される要素の範囲は、predicateへの最初の呼び出しの前に設定されます。 呼び出しが開始された後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合渡される値は、その時点での値になります。
find メソッドが呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(predicate) が false なら、TypeError例外をスローする
- 0 を k とする
- k < len の間繰り返し
- undefined を返す
22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
predicateは関数です。3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 findIndexは、配列の各要素に対して昇順でpredicateを1回呼び出します。predicateがtrueを返すものが見つかった場合、findIndexはその要素値のインデックスを返します。 それ以外の場合、findIndexは-1を返します。
thisArgパラメーターは、predicateのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
predicateは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。
findIndexは、呼び出されたオブジェクトを直接変更しません。ただし、predicateよってオブジェクトが変更される場合があります。
findIndexによって処理される要素の範囲は、predicateを最初に呼び出す前に設定されます。 呼び出しが開始された後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合、predicateに渡されるそれらの値は、その時点での値になります。
findIndexメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(predicate) が false なら、TypeError例外をスローする
- 0 を k とする
- k < len の間繰り返し
- -1 を返す
22.1.3.10 Array.prototype.flat ( [ depth ] )
flatメソッドが0個または1個の引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を sourceLen とする
- 1 を depthNum とする
- depth が undefined でないなら、
- ? ArraySpeciesCreate(O, 0) を A とする
- ? FlattenIntoArray(A, O, sourceLen, 0, depthNum) を実行する
- A を返す
22.1.3.10.1 FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction, thisArg ] )
- Assert: Type(target) は Object型
- Assert: Type(source) は Object型
- Assert: ! IsNonNegativeInteger(sourceLen) は true
- Assert: ! IsNonNegativeInteger(start) は true
- Assert: ! IsInteger(depth) は true または depth は +∞ と -∞ のどちらか
- Assert: mapperFunction が 存在するなら、 ! IsCallable(mapperFunction) は true で thisArg が存在し depth が 1
- start を targetIndex とする
- 0 を sourceIndex とする
- sourceIndex < sourceLen の間繰り返し
- ! ToString(sourceIndex) を P とする
- ? HasProperty(source, P) を exists とする
- exists が true なら、
- ? Get(source, P) を element とする
- mapperFunction が 存在するなら、
- false を shouldFlatten とする
- depth > 0 なら、
- shouldFlatten が true なら、
- ? LengthOfArrayLike(element) を elementLen とする
- ? FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1) を targetIndex にセットする
- v. と異なるなら、
- targetIndex ≧ 253 - 1 なら TypeError例外をスローする
- ? CreateDataPropertyOrThrow(target, ! ToString(targetIndex), element) を実行する
- targetIndex + 1 を targetIndex にセットする
- sourceIndex + 1 を sourceIndex にセットする
- targetIndex を返す
22.1.3.11 Array.prototype.flatMap ( mapperFunction [ , thisArg ] )
flatMapメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を sourceLen とする
- ! IsCallable(mapperFunction) が false なら、TypeError例外をスローする
- ? ArraySpeciesCreate(O, 0) を A とする
- ? FlattenIntoArray(A, O, sourceLen, 0, 1, mapperFunction, thisArg) を実行する
- A を返す
22.1.3.12 Array.prototype.forEach ( callbackfn [ , thisArg ] )
引数callbackfnは、3つの引数を受け入れる関数です。 forEachは、配列要素ごとに昇順で1回callbackfnを呼び出します。 callbackfnは、実際に存在する配列の要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。
thisArgパラメーターは、callbackfnのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。
forEachは、呼び出されたオブジェクトを直接変更しません。ただし、callbackfnのによってオブジェクトが変更される場合があります。
forEachメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- 0 を k とする
- k < len の間繰り返し
- undefined を返す
この関数は、%ArrayProto_forEach%組み込みオブジェクトです。
22.1.3.13 Array.prototype.includes ( searchElement [ , fromIndex ] )
includeは、SameValueZeroアルゴリズムを使用して、searchElementと配列の要素と昇順で比較します。同じ要素があった場合はtrueを返します。 それ以外の場合は、falseが返されます。
オプションの2番目の引数fromIndexのデフォルトは0です。つまり、配列全体が検索されます。 配列の長さ以上の場合、falseが返されます。つまり、配列は検索されません。 負の場合、配列の終わりからのオフセットとして使用されます。 その際、インデックスが0未満の場合、配列全体が検索されます。
includes メソッドが呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- len が 0 なら、 false を返す
- ? ToInteger(fromIndex) を n とする
- Assert: fromIndex が undefined なら、 n は 0
- n ≧ 0 なら、
- n を k とする
- 6. と異なるなら、
- len + n を k とする
- k < 0 なら 0 を k にセットする
- k < len の間繰り返し
- ? Get(O, ! ToString(k)) の結果を elementK とする
- SameValueZero(searchElement, elementK) が true なら、 true を返す
- k + 1 を k にセットする
- false を返す
22.1.3.14 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
indexOfは、厳密等値比較アルゴリズムを使用して、searchElementと配列の要素を昇順で比較します。同じ値が見つかった場合、最小のインデックスを返します。 それ以外の場合は、-1が返されます。
オプションの2番目の引数fromIndexのデフォルトは0です。つまり、配列全体が検索されます。 配列の長さ以上の場合、-1が返されます。つまり、配列は検索されません。 負の場合、配列の終わりからのオフセットとして使用されます。 その際、インデックスが0未満の場合、配列全体が検索されます。
indexOfメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
22.1.3.15 Array.prototype.join ( separator )
joinメソッドは、1つの引数、separatorを取り、次の手順を実行します。
22.1.3.16 Array.prototype.keys ( )
次の手順が実行されます。
- ? ToObject(this値) を O とする
- CreateArrayIterator(O, key) を返す
この関数は、%ArrayProto_keys%組み込みオブジェクトです。
22.1.3.17 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
lastIndexOfは、厳密等値比較 アルゴリズムを使用して、searchElementと配列の要素を降順で比較します。同じ値が見つかった場合、最大のインデックスを返します。 それ以外の場合は、-1が返されます。
オプションの2番目の引数fromIndexは、デフォルトで配列の長さから1を引いたものになります。つまり、配列全体が検索されます。 配列の長さ以上の場合、配列全体が検索されます。 負の場合、配列の終わりからのオフセットとして使用されます。その際、開始インデックスが0未満の場合、-1が返されます。
lastIndexOfメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
22.1.3.18 Array.prototype.map ( callbackfn [ , thisArg ] )
callbackfnは、3つの引数を受け入れる関数である必要があります。 mapは、配列内の要素ごとに昇順で1回callbackfnを呼び出し、その結果から新しい配列を作成します。 callbackfnは、実際に存在する要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。
thisArgパラメーターは、callbackfnのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。
mapは、呼び出されたオブジェクトを直接変更しません。ただし、callbackfnによってオブジェクトが変更される場合があります。
mapによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出しの開始後に追加された要素は、アクセスされません。 既存の要素が変更された場合、アクセス時点での値になります。 呼び出し開始後に削除された要素はアクセスされません。
mapメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- ? ArraySpeciesCreate(O, len) を A とする
- 0 を k とする
- k < len の間繰り返し
- A を返す
22.1.3.19 Array.prototype.pop ( )
pop メソッドが呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- len がゼロなら、
- 3. と異なるなら、
22.1.3.20 Array.prototype.push ( ...items )
ゼロ個以上の引数を指定してpushメソッドを呼び出すと、次の手順が実行されます。
push の "length"プロパティは 1 です。
22.1.3.21 Array.prototype.reduce ( callbackfn [ , initialValue ] )
引数callbackfnは、4つの引数を取る関数である必要があります。 reduceは、配列の最初の要素と後の要素ごとに1回、昇順でcallbackfnを呼び出します。
callbackfnは、previousValue(callbackfnへの前回の呼び出しの結果値)、currentValue(現在の要素の値)、currentIndex、および対象となっているオブジェクトの4つの引数で呼び出されます。 callbackfnが最初に呼び出されるとき、initialValueが指定された場合、previousValueはinitialValueに等しくなり、currentValueは配列の最初の値に等しくなります。 initialValueが指定されていない場合、previousValueは配列の最初の値に等しくなり、currentValueは2番目の値に等しくなります。 配列に要素が含まれておらず、initialValueが指定されていない場合は、TypeErrorです。
reduceは、呼び出されたオブジェクトを直接変更しません。ただし、callbackfnの呼び出しによってオブジェクトが変更される場合があります。
reduceによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出しが開始された後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合、その時点での値になります。 呼び出しが開始された後、削除された要素はアクセスされません。
1つまたは2つの引数を指定してreduceメソッドを呼び出すと、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- len が 0 で initialValue が存在しないなら、TypeError例外をスローする
- 0 を k とする
- undefined を accumulator とする
- initialValue が 存在するなら、
- initialValue を accumulator にセットする
- 7. と異なるなら、
- k < len の間繰り返し
- accumulator を返す
22.1.3.22 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
引数callbackfnは、4つの引数を取る関数である必要があります。 reduceRightは、配列に存在する最初の要素と後の要素ごとに1回、降順でコールバックを呼び出します。
callbackfnは、previousValue(callbackfnの前回の呼び出し結果)、currentValue(現在の要素の値)、currentIndex、および対象となっているオブジェクトの4つの引数で呼び出されます。 callbackfnが初めて呼び出されるとき、initialValueが指定された場合、previousValueはinitialValueに等しくなり、currentValueは配列の最後の値に等しくなります。 initialValueが指定されていない場合、previousValueは配列の最後の値に等しくなり、currentValueは最後から2番目の値に等しくなります。 配列に要素が含まれておらず、initialValueが指定されていない場合は、TypeErrorです。
reduceRightは、呼び出されたオブジェクトを直接変更しません。ただし、callbackfnの呼び出しによってオブジェクトが変更される場合があります。
reduceRightによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出しが開始された後に追加された要素は、アクセスされません。 既存の要素がcallbackfnによって変更された場合、callbackfnに渡される値は、reduceRightがそれらにアクセスしたときの値になります。 呼び出しが開始された後、削除された要素はアクセスされません。
reduceRightメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- len が 0 で initialValue が存在しないなら、TypeError例外をスローする
- len - 1 を k とする
- undefined を accumulator とする
- initialValue が 存在するなら、 then
- initialValue を accumulator にセットする
- 7. と異なるなら、
- k ≧ 0 の間繰り返し
- accumulator を返す
22.1.3.23 Array.prototype.reverse ( )
reverse メソッドが呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- floor(len / 2) を middle とする
- 0 を lower とする
- lower ≠ middle の間繰り返し
- len - lower - 1 を upper とする
- ! ToString(upper) を upperP とする
- ! ToString(lower) を lowerP とする
- ? HasProperty(O, lowerP) を lowerExists とする
- lowerExists が true なら、
- ? HasProperty(O, upperP) を upperExists とする
- upperExists が true なら、
- lowerExists が true で、 upperExists が true なら、
- h. と異なり、 lowerExists が false で upperExists が true なら、
- ? Set(O, lowerP, upperValue, true) を実行する
- ? DeletePropertyOrThrow(O, upperP) を実行する
- i. と異なり、 lowerExists が true で upperExists が false なら、
- ? DeletePropertyOrThrow(O, lowerP) を実行する
- ? Set(O, upperP, lowerValue, true) を実行する
- j. と異なるなら、
- Assert: lowerExists と upperExists は両方 false
- No action is required
- lower + 1 を lower にセットする
- O を返す
22.1.3.24 Array.prototype.shift ( )
shift メソッドが呼び出されると、次の手順が実行されます。
22.1.3.25 Array.prototype.slice ( start, end )
次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- max(final - k, 0) を count とする
- ? ArraySpeciesCreate(O, count) を A とする
- 0 を n とする
- k < final の間繰り返し
- ! ToString(k) を Pk とする
- ? HasProperty(O, Pk) を kPresent とする
- kPresent が true なら、
- k + 1 を k にセットする
- n + 1 を n にセットする
- ? Set(A, "length", n, true) を実行する
- A を返す
22.1.3.26 Array.prototype.some ( callbackfn [ , thisArg ] )
引数callbackfnは、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返す関数です。 配列に存在する要素ごとに、callbackfnを昇順で1回呼び出します。ただし、callbackfnがtrueを返した時点で、someはtrueを返します。 それ以外の場合、someはfalseを返します。 callbackfnは、実際に存在する配列の要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。
thisArgパラメーターは、callbackfnのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。
callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。
呼び出されたオブジェクトは直接変更されません。ただし、callbackfnの呼び出しによってオブジェクトが変更される場合があります。
someで処理される要素の範囲は、callbackfnの最初の呼び出しの前に設定されます。 呼び出しが開始された後に追加された要素は、アクセスされません。 既存の要素が変更された場合、アクセス時点の値になります。 呼び出しが開始された後、削除された要素はアクセスされません。 someは数学の「存在記号」のように機能します。 空の配列の場合、falseを返します。
someメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- 0 を k とする
- k < len の間繰り返し
- false を返す
22.1.3.27 Array.prototype.sort ( comparefn )
配列要素をソートします。 並べ替えは安定している必要があります。つまり、等しい要素は元の順序のままである必要があります。 comparefnは、2つの引数xとyを受け入れ、x < yの場合は負の値、x = yの場合はゼロ、x > yの場合は正の値を返す関数である必要があります。
入力時に、ソート関数の評価を初期化するために以下のステップが実行されます。
- comparefn が undefined でなく IsCallable(comparefn) が false なら、TypeError例外をスローする
- ? ToObject(this値) を obj とする
- ? LengthOfArrayLike(obj) を len とする
このsortメソッドの仕様では、次のアルゴリズムがtrueを返す場合、オブジェクトobjはsparseです。
- 0 ≦ i < len の範囲の整数 i ごとに次を実行する
- obj.[[GetOwnProperty]](! ToString(i)) を elem とする
- elem が undefined なら、 true を返す
- false を返す
ソート順とは、関数の完了後の、objのプロパティ値の順序(整数インデックス)です。 sort関数の結果は、次のように決定されます。
comparefnがundefinedではなく、配列要素の一貫した比較関数ではない場合(以下を参照)、ソート順は実装によって定義されます。 comparefnがundefinedで、SortCompareが一貫した比較関数として機能しない場合、ソート順は実装によって定義されます。
obj.[[GetPrototypeOf]]()をprotoとします。 protoがnullでなく、以下のすべての条件が満たされるような整数jが存在する場合、ソート順は実装によって定義されます。
- obj が sparse
- 0 ≦ j < len
- HasProperty(proto, ToString(j)) が true
objがsparseであり、次の条件のいずれかが当てはまる場合、ソート順も実装によって定義されます。
- IsExtensible(obj) が false
- objのlen未満の整数インデックスプロパティの[[Configurable]]属性がfalseであるデータプロパティ
次の条件のいずれかが当てはまる場合、ソート順も実装によって定義されます。
- objがエキゾチックオブジェクト(プロキシエキゾチックオブジェクトを含む)であり、[[Get]]、[[Set]]、[[Delete]]、[[GetOwnProperty]]内部メソッドが、通常のオブジェクト 実装ではない
- objのlen未満で負でない整数インデックスプロパティがアクセサプロパティであるか、[[Writable]]属性がfalseのデータプロパティ
- comparefnがundefinedで、SortCompareに引数として渡された値にToStringを適用すると、objまたはobjのプロトタイプチェーン上のオブジェクトが変更される
- comparefnがundefinedで、ToStringのすべてのアプリケーションが、SortCompareに引数として渡された特定の値に対して、同じ結果を生成しない
次の手順が実行されます。
- 最初の引数にobjを使用してGet、Set、DeletePropertyOrThrow、HasOwnProperty抽象操作と、SortCompare(以下で説明)への、実装に依存する一連の呼び出しを実行する。
- Get、Set、DeletePropertyOrThrow、HasOwnPropertyの各呼び出しのプロパティキー引数は、len未満の非負の整数の文字列表現
- Setのすべての呼び出しのThrow引数はtrue
- SortCompare呼び出しの引数は、以前の呼び出しでアクセスしたプロパティがHasOwnPropertyの結果で存在していないと判断された場合を除き、Get抽象操作の以前の呼び出しで返された値。SortCompareの引数が両方存在しない場合は、SortCompareを呼び出す代わりに+0を使用する。最初の引数のみが存在しない場合は+ 1を、2番目の引数のみが存在しない場合は-1を使用する。
- objがsparseでないなら、DeletePropertyOrThrowを呼び出してはいけない
- これらの操作のいずれかから突然の完了が返されたなら、この関数の結果としてすぐに返す
- obj を返す
ソート順が実装定義として上記で指定されていない限り、返されるオブジェクトには次の2つの特性が必要です。
- len未満の非負の整数の数学的順列をπとします。len未満のすべての非負の整数jについて、プロパティold[j]が存在する場合、new[π(j)]はold [j]とまったく同じ値になります。 ただし、プロパティold[j]が存在しなかった場合、new[π(j)]は存在しません。
- 次に、len未満のすべての非負の整数jおよびkについて、SortCompare(old[j], old[k]) < 0 の場合、new[π(j)] < new[π(k)] です。
ここで、表記old[j]は、この関数が実行される前にGet(obj,j) を呼び出した結果をあらわします。
表記new[j]は、この関数が実行された後にGet(obj,j)を呼び出した結果をあらわします。
関数comparefnは、セットSのすべての値a、b、およびc(おそらく同じ値)について以下のすべての要件が満たされている場合、セット値Sの一貫した比較関数です。 a < CF bという表記は、comparefn(a,b) < 0 を意味します。a = CF bは、comparefn(a,b) = 0(いずれかの符号)を意味します。 a > CF bという表記は、comparefn(a,b) > 0 を意味します。
- 特定の引数ペアでcomparefnを呼び出した場合、常に同じ値vが返されます。 さらに、Type(v)はNumberであり、vはNaNではありません。 これは、 a < CF b、 a = CF b、 a > CF bのいずれか1つがaとbの特定のペアに対して真になることを意味します。
- comparefn(a,b)の呼び出しは、objまたはobjのプロトタイプチェーン上のオブジェクトを変更しません。
- a = CF a(再帰性)
- a = CF bの場合、b = CF a(対称性)
- a = CF bおよびb = CF cの場合、a = CF c(= CFの推移性)
- a < CF bおよびb < CF cの場合、a < CF c(< CFの推移性)
- a > CF bおよびb > CF cの場合、a > CF c(> CFの推移性)
22.1.3.27.1 ランタイムセマンティクス(Runtime Semantics): SortCompare ( x, y )
SortCompare抽象演算は、2つの引数xおよびyを使用して呼び出されます。 また、sortメソッドの現在の呼び出しに渡されたcomparefn引数にもアクセスできます。 次の手順が実行されます。次の手順が実行されます。
- x と y の両方が both undefined なら +0 を返す
- x が undefined なら、 1 を返す
- y が undefined なら、 -1 を返す
- comparefn が undefined でないなら、
- ? ToString(x) を xString とする
- ? ToString(y) を yString とする
- 抽象関係比較 xString < yString の結果を xSmaller とする
- xSmaller が true なら、 -1 を返す
- 抽象関係比較 yString < xString の結果を ySmaller とする
- ySmaller が true なら、 1 を返す
- +0 を返す
22.1.3.28 Array.prototype.splice ( start, deleteCount, ...items )
次の手順が実行されます。
- ? ToObject(this値) を O とする
- ? LengthOfArrayLike(O) を len とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を actualStart とする
- 実際の引数の数が 0 なら、
- 0 を insertCount とする
- 0 を actualDeleteCount とする
- 5. と異なり、実際の引数の数が 1 なら、
- 0 を insertCount とする
- len - actualStart を actualDeleteCount とする
- 6. と異なるなら、
- len + insertCount - actualDeleteCount > 253 - 1, TypeError例外をスローする
- ? ArraySpeciesCreate(O, actualDeleteCount) を A とする
- 0 を k とする
- k < actualDeleteCount の間繰り返し
- ! ToString(actualStart + k) を from とする
- ? HasProperty(O, from) を fromPresent とする
- fromPresent が true なら、
- ? Get(O, from) を fromValue とする
- ? CreateDataPropertyOrThrow(A, ! ToString(k), fromValue) を実行する
- k + 1 を k にセットする
- ? Set(A, "length", actualDeleteCount, true) を実行する
- 実際の引数の3番目から始まる要素リストを items とする。引数が3つ未満の場合、リストはempty
- items の要素数を itemCount とする
- itemCount < actualDeleteCount なら、
- actualStart を k にセットする
- k < (len - actualDeleteCount) の間繰り返し
- ! ToString(k + actualDeleteCount) を from とする
- ! ToString(k + itemCount) を to とする
- ? HasProperty(O, from) を fromPresent とする
- fromPresent が true なら、
- iv. と異なるなら、
- Assert: fromPresent は false
- ? DeletePropertyOrThrow(O, to) を実行する
- k + 1 を k にセットする
- len を k にセットする
- k > (len - actualDeleteCount + itemCount) の間繰り返し
- ? DeletePropertyOrThrow(O, ! ToString(k - 1)) を実行する
- k - 1 を k にセットする
- 15. と異なり、 itemCount > actualDeleteCount なら、
- (len - actualDeleteCount) を k にセットする
- k > actualStart の間繰り返し
- ! ToString(k + actualDeleteCount - 1) を from とする
- ! ToString(k + itemCount - 1) を to とする
- ? HasProperty(O, from) を fromPresent とする
- fromPresent が true なら、
- iv. と異なるなら、
- Assert: fromPresent は false
- ? DeletePropertyOrThrow(O, to) を実行する
- k - 1 を k にセットする
- actualStart を k にセットする
- items が empty でない間繰り返し
- ? Set(O, "length", len - actualDeleteCount + itemCount, true) を実行する
- A を返す
22.1.3.29 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
ECMA-402国際化APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにArray.prototype.toLocaleStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleStringメソッドの次の仕様が使用されます。
このメソッドのオプションのパラメーターの意味は、ECMA-402仕様で定義されています。 ECMA-402サポートを含まない実装では、これらのパラメーター位置を他の目的で使用してはなりません。
次の手順が実行されます。
- ? ToObject(this値) を array とする
- ? LengthOfArrayLike(array) を len とする
- ホスト環境の現在のロケールに適したリスト区切り文字列の文字列値(実装定義の方法で導出)を separator とする
- empty String を R とする
- 0 を k とする
- k < len の間繰り返し
- R を返す
22.1.3.30 Array.prototype.toString ( )
toString メソッドが呼び出されると、次の手順が実行されます。
22.1.3.31 Array.prototype.unshift ( ...items )
unshiftメソッドが0個以上の引数item1、item2などで呼び出されると、次の手順が実行されます。
unshift の "length"プロパティは 1 です。
22.1.3.32 Array.prototype.values ( )
次の手順が実行されます。
- ? ToObject(this値) を O とする
- CreateArrayIterator(O, value) を返す
この関数は、%ArrayProto_values%組み込みオブジェクトです。
22.1.3.33 Array.prototype [ @@iterator ] ( )
@@iteratorプロパティの初期値は、Array.prototype.valuesプロパティの初期値と同じ関数オブジェクトです。
22.1.3.34 Array.prototype [ @@unscopables ]
@@unscopablesデータプロパティの初期値は、次の手順で作成されたオブジェクトです。
- OrdinaryObjectCreate(null) を unscopableList とする
- ! CreateDataPropertyOrThrow(unscopableList, "copyWithin", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "entries", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "fill", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "find", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "findIndex", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "flat", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "flatMap", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "includes", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "keys", true) を実行する
- ! CreateDataPropertyOrThrow(unscopableList, "values", true) を実行する
- unscopableList を返す
このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } です。
22.1.4 Arrayインスタンスのプロパティ(Properties of Array Instances)
ArrayインスタンスはArrayエキゾチックオブジェクトであり、指定された内部メソッドがあります。 Arrayインスタンスは、Arrayプロトタイプオブジェクトからプロパティを継承します。
配列インスタンスには、"length"プロパティと、配列インデックス名を持つ列挙可能なプロパティのセットがあります。
22.1.4.1 length
Arrayインスタンスの"length"プロパティは、名前が配列インデックスであるすべての構成可能な独自のプロパティの名前よりも常に数値が大きいデータプロパティです。
"length"プロパティ属性の初期値は、{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false}です。
22.1.5 Arrayイテレータオブジェクト(Array Iterator Objects)
Arrayイテレータはオブジェクトであり、特定のArrayインスタンスオブジェクトに対する特定の反復を表します。 Arrayイテレータオブジェクトの名前付きコンストラクターはありません。 代わりに、Arrayイテレータオブジェクトは、Arrayインスタンスオブジェクトの特定のメソッドを呼び出すことによって作成されます。
22.1.5.1 CreateArrayIterator ( array, kind )
Arrayオブジェクトのいくつかのメソッドは、Iteratorオブジェクトを返します。 このようなイテレータオブジェクトを作成するには、引数arrayとkindを指定した抽象演算CreateArrayIteratorを使用します。 次の手順を実行します。
- Assert: Type(array) は Object型
- Assert: kind は key+value, key, or value
- OrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] ») を iterator とする
- array を iterator.[[IteratedArrayLike]] にセットする
- 0 を iterator.[[ArrayLikeNextIndex]] にセットする
- kind を iterator.[[ArrayLikeIterationKind]] にセットする
- iterator を返す
22.1.5.2 The %ArrayIteratorPrototype% Object
%ArrayIteratorPrototype%オブジェクトは、次の特徴があります。
-
- すべてのArrayイテレータオブジェクトに継承されるプロパティがあります。
- 通常のオブジェクトです。
- [[Prototype]]内部スロットがあり、値は%IteratorPrototype% です。
- 以下のプロパティがあります。
22.1.5.2.1 %ArrayIteratorPrototype%.next ( )
- this値 を O とする
- Type(O) が Object型でないなら、TypeError例外をスローする
- O Arrayイテレータインスタンス(22.1.5.3)のすべての内部スロットを持っていないなら TypeError例外をスローする
- O.[[IteratedArrayLike]] を a とする
- a が undefined なら、 CreateIterResultObject(undefined, true) を返す
- O.[[ArrayLikeNextIndex]] を index とする
- O.[[ArrayLikeIterationKind]] を itemKind とする
- a が [[TypedArrayName]] 内部スロットを持っている、
- IsDetachedBuffer(a.[[ViewedArrayBuffer]]) が true なら、TypeError例外をスローする
- a.[[ArrayLength]] を len とする
- 8. と異なるなら、
- ? LengthOfArrayLike(a) を len とする
- index ≧ len なら、
- undefined を O.[[IteratedArrayLike]] にセットする
- CreateIterResultObject(undefined, true) を返す
- index + 1 を O.[[ArrayLikeNextIndex]] にセットする
- itemKind が key なら、 CreateIterResultObject(index, false) を返す
- ! ToString(index) を elementKey とする
- ? Get(a, elementKey) を elementValue とする
- itemKind が value なら、 elementValue を result とする
- 15. と異なるなら、
- Assert: itemKind は key+value
- ! CreateArrayFromList(« index, elementValue ») を result とする
- CreateIterResultObject(result, false) を返す
22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
@@toStringTagプロパティの初期値は、文字列値"Array Iterator"です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
22.1.5.3 Arrayイテレータインスタンスのプロパティ(Properties of Array Iterator Instances)
Arrayイテレータインスタンスは、%ArrayIteratorPrototype%組み込みオブジェクトからプロパティを継承する通常のオブジェクトです。 Arrayイテレータインスタンスは、最初に表60にリストされている内部スロットを使用して作成されます。
内部スロット | 内容 |
---|---|
[[IteratedArrayLike]] | 対象となっているarrayライクオブジェクト |
[[ArrayLikeNextIndex]] | イテレータによって返される次の要素の整数インデックス。 |
[[ArrayLikeIterationKind]] | イテレータによって返される要素を識別する文字列値。 使用できる値は、key、value、key+valueです。 |
22.2 TypedArrayオブジェクト(TypedArray Objects)
TypedArrayオブジェクトは基になるバイナリデータバッファ(24.1)に、配列のようなビューでアクセスします。 TypedArrayインスタンスの各要素には、基になるバイナリスカラーデータ型があります。 サポートされている要素タイプごとに、表61にリストされているTypedArrayコンストラクターがあります。 各コンストラクターには、対応する個別のプロトタイプオブジェクトがあります。
コンストラクター名と組み込みオブジェクト名 | 要素タイプ | 要素サイズ | 変換操作 | 内容 |
---|---|---|---|---|
Int8Array %Int8Array% |
Int8 | 1 | ToInt8 | 8ビット2の補数符号付き整数 |
Uint8Array %Uint8Array% |
Uint8 | 1 | ToUint8 | 8ビット符号なし整数 |
Uint8ClampedArray %Uint8ClampedArray% |
Uint8C | 1 | ToUint8Clamp | 8ビット符号なし整数(クランプ変換) |
Int16Array %Int16Array% |
Int16 | 2 | ToInt16 | 16ビット2の補数符号付き整数 |
Uint16Array %Uint16Array% |
Uint16 | 2 | ToUint16 | 16ビット符号なし整数 |
Int32Array %Int32Array% |
Int32 | 4 | ToInt32 | 32ビット2の補数符号付き整数 |
Uint32Array %Uint32Array% |
Uint32 | 4 | ToUint32 | 32ビット符号なし整数 |
BigInt64Array %BigInt64Array% |
BigInt64 | 8 | ToBigInt64 | 64ビット2の補数符号付き整数 |
BigUint64Array %BigUint64Array% |
BigUint64 | 8 | ToBigUint64 | 64ビット符号なし整数 |
Float32Array %Float32Array% |
Float32 | 4 | 32ビットIEEE浮動小数点 | |
Float64Array %Float64Array% |
Float64 | 8 | 64ビットIEEE浮動小数点 |
以下の定義のTypedArrayへの参照は、上記の表の適切なコンストラクター名に置き換える必要があります。
22.2.1 %TypedArray%組み込みオブジェクト(The %TypedArray% Intrinsic Object)
%TypedArray%組み込みオブジェクトは、次の特徴があります。
- TypedArrayコンストラクターオブジェクトのすべてを継承するコンストラクター関数オブジェクトです。
- 対応するプロトタイプオブジェクトとともに、すべてのTypedArrayコンストラクターとそのインスタンスによって継承される共通のプロパティを提供します。
- グローバル名がありません。または、グローバルオブジェクトのプロパティとして存在しません。
- さまざまなTypedArrayコンストラクターの抽象スーパークラスとして機能します。
- 抽象クラスコンストラクターであるため、呼び出されるとエラーがスローされます。 TypedArrayコンストラクターは、super呼び出しを実行しません。
22.2.1.1 %TypedArray% ( )
%TypedArray%コンストラクターは、次の手順を実行します。
- TypeError例外をスローする
%TypedArray%コンストラクターの"length"プロパティは0です。
22.2.2 %TypedArray%組み込みオブジェクトのプロパティ(Properties of the %TypedArray% Intrinsic Object)
%TypedArray%組み込みオブジェクトは、次の特徴があります。
- [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
- "name"プロパティがあり、値は"TypedArray"です。
- 以下のプロパティがあります。
22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
from が引数 source とオプション引数 mapfn と thisArg で呼び出されると、次の手順が実行されます。
- this値 を C とする
- IsConstructor(C) が false なら、TypeError例外をスローする
- mapfn が undefined なら、 false を mapping とする
- 3. と異なるなら、
- IsCallable(mapfn) が false なら、TypeError例外をスローする
- true を mapping とする
- ? GetMethod(source, @@iterator) を usingIterator とする
- usingIterator が undefined でないなら、
- ? IterableToList(source, usingIterator) を values とする
- values の要素数を len とする
- ? TypedArrayCreate(C, « len ») を targetObj とする
- 0 を k とする
- k < len の間繰り返し
- Assert: values は empty List
- targetObj を返す
- NOTE: source はIterableではないため、arrayライクオブジェクトと想定する
- ! ToObject(source) を arrayLike とする
- ? LengthOfArrayLike(arrayLike) を len とする
- ? TypedArrayCreate(C, « len ») を targetObj とする
- 0 を k とする
- k < len の間繰り返し
- targetObj を返す
22.2.2.1.1 ランタイムセマンティクス(Runtime Semantics): IterableToList ( items, method )
抽象操作IterableToList は、次の手順を実行します。
- ? GetIterator(items, sync, method) を iteratorRecord とする
- 空の新規List を values とする
- true を next とする
- next is not false の間繰り返し
- ? IteratorStep(iteratorRecord) を next にセットする
- next が false でないなら、
- ? IteratorValue(next) を nextValue とする
- nextValue を Listvalues の最後に追加する
- values を返す
22.2.2.2 %TypedArray%.of ( ...items )
ofメソッドが任意の数の引数で呼び出されると、次の手順が実行されます。
- 関数に渡された引数の実際の数を len とする
- 関数に渡された引数の Listを items とする
- this値 を C とする
- IsConstructor(C) が false なら、TypeError例外をスローする
- ? TypedArrayCreate(C, « len ») を newObj とする
- 0 を k とする
- k < len の間繰り返し
- newObj を返す
22.2.2.3 %TypedArray%.prototype
%TypedArray%.prototypeの初期値は、%TypedArray.prototype%組み込みオブジェクトです。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
22.2.2.4 get %TypedArray% [ @@species ]
%TypedArray%[@@species]はsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を返す
この関数の"name"プロパティの値は"get [Symbol.species]"です。
22.2.3 %TypedArray.prototype%オブジェクトのプロパティ(Properties of the %TypedArray.prototype% Object)
%TypedArray.prototype%オブジェクトは、次の特徴があります。
- [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
- 通常のオブジェクトです。
- TypedArrayインスタンスオブジェクト固有の[[ViewedArrayBuffer]]や、その他の内部スロットはありません。
22.2.3.1 get %TypedArray%.prototype.buffer
%TypedArray%.prototype.bufferはsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を O とする
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
- O.[[ViewedArrayBuffer]] を buffer とする
- buffer を返す
22.2.3.2 get %TypedArray%.prototype.byteLength
%TypedArray%.prototype.byteLengthはsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を O とする
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
- O.[[ViewedArrayBuffer]] を buffer とする
- IsDetachedBuffer(buffer) が true なら、 0 を返す
- O.[[ByteLength]] を size とする
- size を返す
22.2.3.3 get %TypedArray%.prototype.byteOffset
%TypedArray%.prototype.byteOffsetはsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を O とする
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
- O.[[ViewedArrayBuffer]] を buffer とする
- IsDetachedBuffer(buffer) が true なら、 0 を返す
- O.[[ByteOffset]] を offset とする
- offset を返す
22.2.3.4 %TypedArray%.prototype.constructor
%TypedArray%.prototype.constructorの初期値は、%TypedArray%組み込みオブジェクトです。
22.2.3.5 %TypedArray%.prototype.copyWithin ( target, start [ , end ] )
%TypedArray%.prototype.copyWithinの引数の解釈と使用方法は、22.1.3.3で定義されているArray.prototype.copyWithinと同じです。
次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- O.[[ArrayLength]] を len とする
- ? ToInteger(target) を relativeTarget とする
- relativeTarget < 0 なら max((len + relativeTarget), 0) を、異なるなら min(relativeTarget, len) を to とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) 異なるなら、 let from be min(relativeStart, len) を from とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- min(final - from, len - to) を count とする
- count > 0 なら、
- NOTE: コピーは、ソースデータのビットレベルのエンコーディングを保持したままおこなう
- O.[[ViewedArrayBuffer]] を buffer とする
- IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
- O.[[TypedArrayName]] のString値を typedArrayName とする
- 表61で、typedArrayName に対応する要素サイズを elementSize とする
- O.[[ByteOffset]] を byteOffset とする
- to × elementSize + byteOffset を toByteIndex とする
- from × elementSize + byteOffset を fromByteIndex とする
- count × elementSize を countBytes とする
- fromByteIndex < toByteIndex で toByteIndex < fromByteIndex + countBytes なら、
- -1 を direction とする
- fromByteIndex + countBytes - 1 を fromByteIndex にセットする
- toByteIndex + countBytes - 1 を toByteIndex にセットする
- j. と異なるなら、
- 1 を direction とする
- countBytes > 0 の間繰り返し
- GetValueFromBuffer(buffer, fromByteIndex, Uint8, true, Unordered) を value とする
- SetValueInBuffer(buffer, toByteIndex, Uint8, value, true, Unordered) を実行する
- fromByteIndex + direction を fromByteIndex にセットする
- toByteIndex + direction を toByteIndex にセットする
- countBytes - 1 を countBytes にセットする
- O を返す
22.2.3.5.1 ランタイムセマンティクス(Runtime Semantics): ValidateTypedArray ( O )
引数Oを指定して呼び出されると、次の手順が実行されます。
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
- O.[[ViewedArrayBuffer]] を buffer とする
- IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
- buffer を返す
22.2.3.6 %TypedArray%.prototype.entries ( )
次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- CreateArrayIterator(O, key+value) を返す
22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
%TypedArray%.prototype.everyは、22.1.3.5で定義されているArray.prototype.everyと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。 アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。また、callbackfnの呼び出しによってthis値が切り離される可能性を考慮に入れる必要があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.8 %TypedArray%.prototype.fill ( value [ , start [ , end ] ] )
%TypedArray%.prototype.fillの引数の解釈と使用方法は、22.1.3.6で定義されているArray.prototype.fillと同じです。
次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- O.[[ArrayLength]] を len とする
- O.[[ContentType]] が BigInt なら ? ToBigInt(value) を value にセットする
- 4.でないなら ? ToNumber(value) を value にセットする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- IsDetachedBuffer(O.[[ViewedArrayBuffer]]) が true なら、TypeError例外をスローする
- k < final の間繰り返し
- O を返す
22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
%TypedArray%.prototype.filterの引数の解釈と使用方法は、22.1.3.7で定義されているArray.prototype.filterと同じです。
filterメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- O.[[ArrayLength]] を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- 空の新規List を kept とする
- 0 を k とする
- 0 を captured とする
- k < len の間繰り返し
- ? TypedArraySpeciesCreate(O, « captured ») を A とする
- 0 を n とする
- kept の各要素を e とし、e ごとに次を実行する
- A を返す
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.10 %TypedArray%.prototype.find ( predicate [ , thisArg ] )
%TypedArray%.prototype.findは、22.1.3.8で定義されているArray.prototype.findと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、predicateの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
%TypedArray%.prototype.findIndexは、22.1.3.9で定義されているArray.prototype.findIndexと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、predicateの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
%TypedArray%.prototype.forEachは、22.1.3.12で定義されているArray.prototype.forEachと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.13 %TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )
%TypedArray%.prototype.includesは、22.1.3.13で定義されているArray.prototype.includesと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.14 %TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )
%TypedArray%.prototype.indexOfは、22.1.3.14で定義されているArray.prototype.indexOfと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.15 %TypedArray%.prototype.join ( separator )
%TypedArray%.prototype.joinは、22.1.3.15で定義されているArray.prototype.joinと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.16 %TypedArray%.prototype.keys ( )
次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- CreateArrayIterator(O, key) を返す
22.2.3.17 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
%TypedArray%.prototype.lastIndexOfは、22.1.3.17で定義されているArray.prototype.lastIndexOfと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.18 get %TypedArray%.prototype.length
%TypedArray%.prototype.lengthはsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
- this値 を O とする
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] と [[ArrayLength]] 内部スロットを持っている
- O.[[ViewedArrayBuffer]] を buffer とする
- IsDetachedBuffer(buffer) が true なら、 0 を返す
- O.[[ArrayLength]] を length とする
- length を返す
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.19 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
%TypedArray%.prototype.mapの引数の解釈と使用方法は、22.1.3.18で定義されているArray.prototype.mapと同じです。
mapメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- O.[[ArrayLength]] を len とする
- IsCallable(callbackfn) が false なら、TypeError例外をスローする
- ? TypedArraySpeciesCreate(O, « len ») を A とする
- 0 を k とする
- k < len の間繰り返し
- A を返す
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.20 %TypedArray%.prototype.reduce ( callbackfn [ , initialValue ] )
%TypedArray%.prototype.reduceは、22.1.3.21で定義されているArray.prototype.reduceと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.21 %TypedArray%.prototype.reduceRight ( callbackfn [ , initialValue ] )
%TypedArray%.prototype.reduceRightは、22.1.3.22で定義されているArray.prototype.reduceRightと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.22 %TypedArray%.prototype.reverse ( )
%TypedArray%.prototype.reverseは、22.1.3.23で定義されているArray.prototype.reverseと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.23 %TypedArray%.prototype.set ( overloaded [ , offset ] )
%TypedArray%.prototype.setは、最初の引数の型に基づいて動作がオーバーロードされる単一の関数です。
この関数は汎用ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.23.1 %TypedArray%.prototype.set ( array [ , offset ] )
TypedArrayに複数の値を設定し、オブジェクトarrayから値を読み取ります。 オプション値offsetは、値が書き込まれるTypedArrayの最初の要素インデックスです。 省略した場合は0とみなされます。
- Assert: arrayは、[[TypedArrayName]]内部スロットを持たないECMAScript言語値。 [[TypedArrayName]]内部スロットを持つオブジェクトは、22.2.3.23.2が適用される
- this値 を target とする
- ? RequireInternalSlot(target, [[TypedArrayName]]) を実行する
- Assert: target has a [[ViewedArrayBuffer]] 内部スロット
- ? ToInteger(offset) を targetOffset とする
- targetOffset < 0 なら RangeError例外をスローする
- target.[[ViewedArrayBuffer]] を targetBuffer とする
- IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
- target.[[ArrayLength]] を targetLength とする
- target.[[TypedArrayName]] のString値を targetName とする
- 表61で、targetName に対応する要素サイズを targetElementSize とする
- 表61で、targetName に対応する要素タイプを targetType とする
- target.[[ByteOffset]] を targetByteOffset とする
- ? ToObject(array) を src とする
- ? LengthOfArrayLike(src) を srcLength とする
- srcLength + targetOffset > targetLength なら RangeError例外をスローする
- targetOffset × targetElementSize + targetByteOffset を targetByteIndex とする
- 0 を k とする
- targetByteIndex + targetElementSize × srcLength を limit とする
- targetByteIndex < limit の間繰り返し
- ! ToString(k) を Pk とする
- ? Get(src, Pk) を value とする
- target.[[ContentType]] が BigInt なら ? ToBigInt(value) を value にセットする
- c.でないなら ? ToNumber(value) を value にセットする
- IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
- SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, Unordered) を実行する
- k + 1 を k にセットする
- targetByteIndex + targetElementSize を targetByteIndex にセットする
- undefined を返す
22.2.3.23.2 %TypedArray%.prototype.set ( typedArray [ , offset ] )
引数オブジェクトtypedArrayから値を読み取り、TypedArrayに複数の値を設定します。 オプションの値offsetは、値が書き込まれるこのTypedArrayの最初の要素インデックスです。 省略した場合は0と見なされます。
- Assert: typedArray は [[TypedArrayName]] 内部スロットがある。ない場合、22.2.3.23.1を適用する
- this値 を target とする
- ? RequireInternalSlot(target, [[TypedArrayName]]) を実行する
- Assert: target は [[ViewedArrayBuffer]] 内部スロットを持っている
- ? ToInteger(offset) を targetOffset とする
- targetOffset < 0 なら RangeError例外をスローする
- target.[[ViewedArrayBuffer]] を targetBuffer とする
- IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
- target.[[ArrayLength]] を targetLength とする
- typedArray.[[ViewedArrayBuffer]] を srcBuffer とする
- IsDetachedBuffer(srcBuffer) が true なら、TypeError例外をスローする
- target.[[TypedArrayName]] のString値を targetName とする
- 表61で targetNameに対応する要素タイプを targetType とする
- 表61で targetNameに対応する要素サイズを targetElementSize とする
- target.[[ByteOffset]] を targetByteOffset とする
- typedArray.[[TypedArrayName]] のString値を srcName とする
- 表61でsrcName に対応する要素タイプを srcType とする
- 表61でsrcName に対応する要素サイズを srcElementSize とする
- typedArray.[[ArrayLength]] を srcLength とする
- typedArray.[[ByteOffset]] を srcByteOffset とする
- srcLength + targetOffset > targetLength なら RangeError例外をスローする
- target.[[ContentType]] と typedArray.[[ContentType]] が等しくないなら、TypeError例外をスローする
- IsSharedArrayBuffer(srcBuffer) と IsSharedArrayBuffer(targetBuffer) の両方が true なら、
- srcBuffer.[[ArrayBufferData]] と targetBuffer.[[ArrayBufferData]] が同じ 共有データブロック 値なら true を、異なるなら false を same とする
- 23. と異なるなら、 SameValue(srcBuffer, targetBuffer) を same とする
- same が true なら、
- typedArray.[[ByteLength]] を srcByteLength とする
- ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, %ArrayBuffer%) を srcBuffer にセットする
- NOTE: %ArrayBuffer%は、観察可能な副作用がないことがわかっているため、srcBufferのクローンを作成するために使用される
- 0 を srcByteIndex とする
- 25. と異なるなら、 srcByteOffset を srcByteIndex とする
- targetOffset × targetElementSize + targetByteOffset を targetByteIndex とする
- targetByteIndex + targetElementSize × srcLength を limit とする
- srcType と targetType が同じなら、
- NOTE: srcTypeとtargetTypeが同じなら、転送はソースデータのビットレベルのエンコーディングを保持して実行する
- targetByteIndex < limit の間繰り返し
- GetValueFromBuffer(srcBuffer, srcByteIndex, Uint8, true, Unordered) を value とする
- SetValueInBuffer(targetBuffer, targetByteIndex, Uint8, value, true, Unordered) を実行する
- srcByteIndex + 1 を srcByteIndex にセットする
- targetByteIndex + 1 を targetByteIndex にセットする
- 29. と異なるなら、
- targetByteIndex < limit の間繰り返し
- GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, Unordered) を value とする
- SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, Unordered) を実行する
- srcByteIndex + srcElementSize を srcByteIndex にセットする
- targetByteIndex + targetElementSize を targetByteIndex にセットする
- targetByteIndex < limit の間繰り返し
- undefined を返す
22.2.3.24 %TypedArray%.prototype.slice ( start, end )
%TypedArray%.prototype.sliceの引数の解釈と使用方法は、22.1.3.25で定義されているArray.prototype.sliceと同じです。 次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- O.[[ArrayLength]] を len とする
- ? ToInteger(start) を relativeStart とする
- relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
- end が undefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
- max(final - k, 0) を count とする
- ? TypedArraySpeciesCreate(O, « count ») を A とする
- O.[[TypedArrayName]] のString値を srcName とする
- 表61で、 srcName に対応する要素タイプを srcType とする
- A.[[TypedArrayName]] のString値を targetName とする
- 表61で、targetName に対応する要素タイプを targetType とする
- srcType と targetType が異なるなら、
- 14. と異なり、 count > 0 なら、
- O.[[ViewedArrayBuffer]] を srcBuffer とする
- IsDetachedBuffer(srcBuffer) が true なら、TypeError例外をスローする
- A.[[ViewedArrayBuffer]] を targetBuffer とする
- 表61で、要素タイプ srcType に対応する要素サイズを elementSize とする
- NOTE: srcTypeとtargetTypeが同じなら、転送はソースデータのビットレベルのエンコーディングを保持して実行する
- O.[[ByteOffset]] を srcByteOffet とする
- A.[[ByteOffset]] を targetByteIndex とする
- (k × elementSize) + srcByteOffet を srcByteIndex とする
- targetByteIndex + count × elementSize を limit とする
- targetByteIndex < limit の間繰り返し
- GetValueFromBuffer(srcBuffer, srcByteIndex, Uint8, true, Unordered) を value とする
- SetValueInBuffer(targetBuffer, targetByteIndex, Uint8, value, true, Unordered) を実行する
- srcByteIndex + 1 を srcByteIndex にセットする
- targetByteIndex + 1 を targetByteIndex にセットする
- A を返す
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.25 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
%TypedArray%.prototype.someは、22.1.3.26で定義されているArray.prototype.someと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.26 %TypedArray%.prototype.sort ( comparefn )
%TypedArray%.prototype.sortは、以下で説明する場合を除き、22.1.3.27で定義されているArray.prototype.sortと同じ要件を実装する関数です。 %TypedArray%.prototype.sortの実装は、thisの値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではない条件で最適化できます。 アルゴリズムが呼び出すことができるthisオブジェクトの内部メソッドは、[[Get]]と[[Set]]だけです。
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
開始時に、ソート機能の評価を初期化するために以下のステップが実行されます。 次の手順は、22.1.3.27の手順の代わりに使用されます。
- comparefn が undefined ではなく、 IsCallable(comparefn) が false なら、TypeError例外をスローする
- this値を obj とする
- ? ValidateTypedArray(obj) を buffer とする
- obj.[[ArrayLength]] を len とする
エキゾチックオブジェクトの実装定義のソート順条件は、%TypedArray%.prototype.sortによって適用されません。
次のバージョンのSortCompareは、%TypedArray%.prototype.sortによって使用されます。 22.1.3.27の文字列比較ではなく、数値比較を実行します。 SortCompareは、sortメソッドの現在の呼び出しのcomparefn値とbuffer値にアクセスできます。
TypedArray SortCompare抽象演算が2つの引数xおよびyを使用して呼び出されると、次の手順が実行されます。
22.2.3.27 %TypedArray%.prototype.subarray ( begin, end )
要素タイプがTypedArrayと同じで、ArrayBufferがTypedArrayのArrayBuffer( 範囲がbeginからendの手前まで)と同じ、新しいTypedArrayオブジェクトを返します。 beginまたはendのいずれかが負の場合、配列の最後からのインデックスを参照します。
- this値 を O とする
- ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
- Assert: O は [[ViewedArrayBuffer]] 内部スロットがある
- O.[[ViewedArrayBuffer]] を buffer とする
- O.[[ArrayLength]] を srcLength とする
- ? ToInteger(begin) を relativeBegin とする
- relativeBegin < 0 なら max((srcLength + relativeBegin), 0) を、異なるなら min(relativeBegin, srcLength) を beginIndex とする
- end が undefined なら、 srcLength を、異なるなら ? ToInteger(end) を relativeEnd とする
- relativeEnd < 0 なら max((srcLength + relativeEnd), 0) を、異なるなら min(relativeEnd, srcLength) を endIndex とする
- max(endIndex - beginIndex, 0) を newLength とする
- O.[[TypedArrayName]] のString値を constructorName とする
- 表61で、constructorName に対応する要素サイズを elementSize とする
- O.[[ByteOffset]] を srcByteOffset とする
- srcByteOffset + beginIndex × elementSize を beginByteOffset とする
- « buffer, beginByteOffset, newLength » を argumentsList とする
- ? TypedArraySpeciesCreate(O, argumentsList) を返す
この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。
22.2.3.28 %TypedArray%.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
%TypedArray%.prototype.toLocaleStringは、22.1.3.29で定義されているArray.prototype.toLocaleStringと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。 アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。
この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。
22.2.3.29 %TypedArray%.prototype.toString ( )
%TypedArray%.prototype.toStringデータプロパティの初期値は、22.1.3.30で定義されているArray.prototype.toStringメソッドと同じ組み込み関数オブジェクトです。
22.2.3.30 %TypedArray%.prototype.values ( )
次の手順が実行されます。
- this値 を O とする
- ? ValidateTypedArray(O) を実行する
- CreateArrayIterator(O, value) を返す
22.2.3.31 %TypedArray%.prototype [ @@iterator ] ( )
@@iteratorプロパティの初期値は、%TypedArray%.prototype.valuesプロパティの初期値と同じ関数オブジェクトです。
22.2.3.32 get %TypedArray%.prototype [ @@toStringTag ]
%TypedArray%.prototype[@@toStringTag]はsetアクセス関数がundefinedの アクセサプロパティ です。 getアクセス関数は、次の手順を実行します。
このプロパティの属性は{[[Enumerable]]:false,[[Configurable]]:true}です。
この関数の"name"プロパティの初期値は "get [Symbol.toStringTag]"です。
22.2.4 TypedArrayコンストラクター(The TypedArray Constructors)
TypedArrayコンストラクターは、次の特徴があります。
- 以下で説明する構造を持つ組み込みオブジェクトです。ただし、TypedArrayという表記は表61のコンストラクター名と置き換える必要があります。
- 引数の数とタイプに基づいて動作がオーバーロードされる単一の関数です。 TypedArrayの実際の動作は、渡される引数の数と種類によって異なります。
- 関数として呼び出されることを意図していません。呼び出されると例外がスローされます。
- サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 サブクラスコンストラクターは、super呼び出して%TypedArray%.prototype組み込みメソッドをサポートした状態で、サブクラスインスタンスを作成および初期化する必要があります。
- 値が3の"length"プロパティがあります。
22.2.4.1 TypedArray ( )
この説明は、TypedArray関数が引数なしで呼び出された場合にのみ適用されます。
- NewTarget が undefined なら、TypeError例外をスローする
- 表61でTypedArrayに対応するコンストラクター名の値のString値を constructorName とする
- ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%", 0) を返す
22.2.4.2 TypedArray ( length )
この説明は、TypedArray関数が1つ以上の引数を指定して呼び出され、最初の引数の型がオブジェクトではない場合にのみ適用されます。
22.2.4.2.1 ランタイムセマンティクス(Runtime Semantics): AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )
AllocateTypedArrayは、TypedArrayコンストラクターのインスタンスを検証および作成する、引数constructorName、newTarget、defaultProto、およびオプションの引数lengthを持つ抽象操作です。 コンストラクター名は、表61のTypedArrayコンストラクターの名前である必要があります。length引数が渡されると、その長さのArrayBufferが割り当てられ、新しいTypedArrayインスタンスに関連付けられます。 AllocateTypedArrayは、すべてのTypedArrayオーバーロードで使用される共通のセマンティクスを提供します。 次の手順を実行します。
- ? GetPrototypeFromConstructor(newTarget, defaultProto) を proto とする
- ! IntegerIndexedObjectCreate(proto) を obj とする
- Assert: obj.[[ViewedArrayBuffer]] は undefined
- constructorName を obj.[[TypedArrayName]] にセットする
- constructorName が "BigInt64Array" または "BigUint64Array" なら BigInt を obj.[[ContentType]] にセットする
- 異なるなら Number を obj.[[ContentType]] にセットする
- length が 存在しないなら、
- 0 を obj.[[ByteLength]] にセットする
- 0 を obj.[[ByteOffset]] にセットする
- 0 を obj.[[ArrayLength]] にセットする
- 7. と異なるなら、
- ? AllocateTypedArrayBuffer(obj, length) を実行する
- obj を返す
22.2.4.2.2 ランタイムセマンティクス(Runtime Semantics): AllocateTypedArrayBuffer ( O, length )
引数Oとlengthを持つ抽象操作AllocateTypedArrayBufferは、ArrayBufferを割り当ててTypedArrayインスタンスOに関連付けます。次の手順を実行します。
- Assert: O は [[ViewedArrayBuffer]] 内部スロットがあるオブジェクト
- Assert: O.[[ViewedArrayBuffer]] は undefined
- Assert: ! IsNonNegativeInteger(length) は true
- O.[[TypedArrayName]] のString値を constructorName とする
- 表61で、 constructorName に対応する要素サイズを elementSize とする
- elementSize × length を byteLength とする
- ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) を data とする
- data を O.[[ViewedArrayBuffer]] にセットする
- byteLength を O.[[ByteLength]] にセットする
- 0 を O.[[ByteOffset]] にセットする
- length を O.[[ArrayLength]] にセットする
- O を返す
22.2.4.3 TypedArray ( typedArray )
この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[TypedArrayName]]内部スロットがある場合にのみ適用されます。
引数typedArrayを指定して呼び出されたTypedArrayは、次の手順を実行します。
- Assert: Type(typedArray) は Object型 で typedArray は [[TypedArrayName]] 内部スロットがある
- NewTarget が undefined なら、TypeError例外をスローする
- 表61でTypedArrayに対応するコンストラクター名の値のString値を constructorName とする
- ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
- typedArray を srcArray とする
- srcArray.[[ViewedArrayBuffer]] を srcData とする
- IsDetachedBuffer(srcData) が true なら、TypeError例外をスローする
- 表61で constructorName に対応する要素タイプを elementType とする
- srcArray.[[ArrayLength]] を elementLength とする
- srcArray.[[TypedArrayName]] のString値を srcName とする
- 表61で srcName に対応する要素タイプを srcType とする
- 表61で srcName に対応する要素サイズを srcElementSize とする
- srcArray.[[ByteOffset]] を srcByteOffset とする
- 表61で constructorName に対応する要素サイズを elementSize とする
- elementSize × elementLength を byteLength とする
- IsSharedArrayBuffer(srcData) が false なら、
- ? SpeciesConstructor(srcData, %ArrayBuffer%) を bufferConstructor とする
- 16. と異なるなら、
- %ArrayBuffer% を bufferConstructor とする
- elementType と srcType が同じなら、
- ? CloneArrayBuffer(srcData, srcByteOffset, byteLength, bufferConstructor) を data とする
- 18. と異なるなら、
- ? AllocateArrayBuffer(bufferConstructor, byteLength) を data とする
- IsDetachedBuffer(srcData) が true なら、TypeError例外をスローする
- srcArray.[[ContentType]] と O.[[ContentType]] が等しくないなら、TypeError例外をスローする
- srcByteOffset を srcByteIndex とする
- 0 を targetByteIndex とする
- elementLength を count とする
- count > 0 の間繰り返し
- GetValueFromBuffer(srcData, srcByteIndex, srcType, true, Unordered) を value とする
- SetValueInBuffer(data, targetByteIndex, elementType, value, true, Unordered) を実行する
- srcByteIndex + srcElementSize を srcByteIndex にセットする
- targetByteIndex + elementSize を targetByteIndex にセットする
- count - 1 を count にセットする
- data を O.[[ViewedArrayBuffer]] にセットする
- byteLength を O.[[ByteLength]] にセットする
- 0 を O.[[ByteOffset]] にセットする
- elementLength を O.[[ArrayLength]] にセットする
- O を返す
22.2.4.4 TypedArray ( object )
この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[TypedArrayName]]または[[ArrayBufferData]]内部スロットがない場合にのみ適用されます。
引数objectで呼び出されたTypedArrayは、次の手順を実行します。
- Assert: Type(object) は Object型 で object は 内部スロット[[TypedArrayName]] と [[ArrayBufferData]] のどちらかがない
- NewTarget が undefined なら、TypeError例外をスローする
- 表61でTypedArrayに対応するコンストラクター名の値のString値を constructorName とする
- ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
- ? GetMethod(object, @@iterator) を usingIterator とする
- usingIterator が undefined でないなら、
- ? IterableToList(object, usingIterator) を values とする
- values の要素数を len とする
- ? AllocateTypedArrayBuffer(O, len) を実行する
- 0 を k とする
- k < len の間繰り返し
- Assert: values は empty ではない
- O を返す
- NOTE: objectはIterableではないので、arrayライクオブジェクトと想定する
- object を arrayLike とする
- ? LengthOfArrayLike(arrayLike) を len とする
- ? AllocateTypedArrayBuffer(O, len) を実行する
- 0 を k とする
- k < len の間繰り返し
- O を返す
22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )
この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[ArrayBufferData]]内部スロットがある場合にのみ適用されます。
少なくとも1つの引数bufferを指定して呼び出されたTypedArrayは、次の手順を実行します。
- Assert: Type(buffer) は Object型で buffer は[[ArrayBufferData]] 内部スロットがある
- NewTarget が undefined なら、TypeError例外をスローする
- 表61でTypedArrayに対応するコンストラクター名の値のString値を constructorName とする
- ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
- 表61で constructorName に対応する要素サイズを elementSize とする
- ? ToIndex(byteOffset) を offset とする
- offset modulo elementSize ≠ 0 なら RangeError例外をスローする
- length が undefined でないなら、
- IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
- buffer.[[ArrayBufferByteLength]] を bufferByteLength とする
- length が undefined なら、
- bufferByteLength modulo elementSize ≠ 0 なら RangeError例外をスローする
- bufferByteLength - offset を newByteLength とする
- newByteLength < 0 なら RangeError例外をスローする
- 11. と異なるなら、
- newLength × elementSize を newByteLength とする
- offset + newByteLength > bufferByteLength なら RangeError例外をスローする
- buffer を O.[[ViewedArrayBuffer]] にセットする
- newByteLength を O.[[ByteLength]] にセットする
- offset を O.[[ByteOffset]] にセットする
- newByteLength / elementSize を O.[[ArrayLength]] にセットする
- O を返す
22.2.4.6 TypedArrayCreate ( constructor, argumentList )
引数constructorとargumentListを使用した抽象操作TypedArrayCreateは、コンストラクター関数を使用して新しいTypedArrayオブジェクトの作成を指定するために使用されます。 次の手順を実行します。
- ? Construct(constructor, argumentList) を newTypedArray とする
- ? ValidateTypedArray(newTypedArray) を実行する
- argumentList が単一の番号のリストなら、
- newTypedArray.[[ArrayLength]] < argumentList[0] なら TypeError例外をスローする
- newTypedArray を返す
22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )
抽象演算TypedArraySpeciesCreateと引数exemplarおよびargumentListは、exemplarから派生したコンストラクター関数を使用して新しいTypedArrayオブジェクトの作成するために使用されます。 次の手順を実行します。
- Assert: exemplar は内部スロット [[TypedArrayName]] と [[ContentType]] を持つObject
- 表61で exemplar.[[TypedArrayName]] に対応する組み込みオブジェクトを defaultConstructor とする
- ? SpeciesConstructor(exemplar, defaultConstructor) を constructor とする
- ? TypedArrayCreate(constructor, argumentList) を result とする
- Assert: result は内部スロット [[TypedArrayName]] と [[ContentType]] がある
- result.[[ContentType]] と exemplar.[[ContentType]] が等しくないなら、TypeError例外をスローする
- result を返す
22.2.5 TypedArrayコンストラクターのプロパティ(Properties of the TypedArray Constructors)
TypedArrayコンストラクターは、次の特徴があります。
- [[Prototype]]内部スロットがあり、値は%TypedArray%です。
- "name"プロパティがあります。値は、表61で指定されているコンストラクター名の文字列値です。
- 以下のプロパティがあります。
22.2.5.1 TypedArray.BYTES_PER_ELEMENT
TypedArray.BYTES_PER_ELEMENTの値は、表61でTypedArrayに対応する要素サイズの値です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
22.2.5.2 TypedArray.prototype
TypedArray.prototypeの初期値は、対応するTypedArrayプロトタイプ組み込みオブジェクト(22.2.6)です。
このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.です。
22.2.6 TypedArrayプロトタイプオブジェクトのプロパティ(Properties of the TypedArray Prototype Objects)
TypedArrayプロトタイプオブジェクトは、次の特徴があります。
- [[Prototype]]内部スロットがあり、その値は%TypedArray.prototype%です。
- 通常のオブジェクトです。
- TypedArrayインスタンスオブジェクト固有の[[ViewedArrayBuffer]]やその他の内部スロットを持っていません。
22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
TypedArray.prototype.BYTES_PER_ELEMENTの値は、表61でTypedArrayに対応する要素サイズの値です。
このプロパティの属性は{{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }です。
22.2.6.2 TypedArray.prototype.constructor
TypedArray.prototype.constructorの初期値は、対応する%TypedArray%組み込みオブジェクトです。
22.2.7 TypedArrayインスタンスのプロパティ(Properties of TypedArray Instances)
TypedArrayインスタンスは、Integer-Indexedエキゾチックオブジェクトです。 各TypedArrayインスタンスは、対応するTypedArrayプロトタイプオブジェクトからプロパティを継承します。 各TypedArrayインスタンスには、[[TypedArrayName]]、[[ViewedArrayBuffer]]、[[ByteLength]]、[[ByteOffset]]、[[ArrayLength]]の内部スロットがあります。